Related articles

*   [fstab (Русский)](/index.php/Fstab_(%D0%A0%D1%83%D1%81%D1%81%D0%BA%D0%B8%D0%B9) "Fstab (Русский)")
*   [Power management/Suspend and hibernate (Русский)](/index.php/Power_management/Suspend_and_hibernate_(%D0%A0%D1%83%D1%81%D1%81%D0%BA%D0%B8%D0%B9) "Power management/Suspend and hibernate (Русский)")
*   [Zswap](/index.php/Zswap "Zswap")
*   [Swap on video ram](/index.php/Swap_on_video_ram "Swap on video ram")
*   [ZFS (Русский)#Swap_volume](/index.php/ZFS_(%D0%A0%D1%83%D1%81%D1%81%D0%BA%D0%B8%D0%B9)#Swap_volume "ZFS (Русский)")
*   [Dm-crypt/Swap encryption](/index.php/Dm-crypt/Swap_encryption "Dm-crypt/Swap encryption")

Эта страница дает ознакомление с [пространством подкачки и подкачкой страниц](https://en.wikipedia.org/wiki/ru:%D0%9F%D0%BE%D0%B4%D0%BA%D0%B0%D1%87%D0%BA%D0%B0_%D1%81%D1%82%D1%80%D0%B0%D0%BD%D0%B8%D1%86 "wikipedia:ru:Подкачка страниц") в GNU/Linux. Охватывает создание, активацию файлов и разделов подкачки.

Взято из [All about Linux swap space](http://www.linux.com/news/software/applications/8208-all-about-linux-swap-space):

	Linux делит свою физическую RAM (оперативную память) на кусочки памяти, называемые страницами. Подкачка (swapping) это процесс, когда страницы памяти копируются на предварительно сконфигурированное пространство на жестком диске, называемое пространством подкачки, чтобы освободить эту страницу из памяти. Суммарный размер оперативной памяти и пространства подкачки это количество доступной виртуальной памяти.

Поддержка подкачки обеспечивается ядром Linux и утилитами в пользовательском пространстве из [util-linux](https://www.archlinux.org/packages/?name=util-linux) пакета.

## Contents

*   [1 Пространство подкачки](#.D0.9F.D1.80.D0.BE.D1.81.D1.82.D1.80.D0.B0.D0.BD.D1.81.D1.82.D0.B2.D0.BE_.D0.BF.D0.BE.D0.B4.D0.BA.D0.B0.D1.87.D0.BA.D0.B8)
*   [2 Раздел подкачки](#.D0.A0.D0.B0.D0.B7.D0.B4.D0.B5.D0.BB_.D0.BF.D0.BE.D0.B4.D0.BA.D0.B0.D1.87.D0.BA.D0.B8)
    *   [2.1 Активация используя systemd](#.D0.90.D0.BA.D1.82.D0.B8.D0.B2.D0.B0.D1.86.D0.B8.D1.8F_.D0.B8.D1.81.D0.BF.D0.BE.D0.BB.D1.8C.D0.B7.D1.83.D1.8F_systemd)
    *   [2.2 Отключение подкачки](#.D0.9E.D1.82.D0.BA.D0.BB.D1.8E.D1.87.D0.B5.D0.BD.D0.B8.D0.B5_.D0.BF.D0.BE.D0.B4.D0.BA.D0.B0.D1.87.D0.BA.D0.B8)
*   [3 Файл подкачки](#.D0.A4.D0.B0.D0.B9.D0.BB_.D0.BF.D0.BE.D0.B4.D0.BA.D0.B0.D1.87.D0.BA.D0.B8)
    *   [3.1 Вручную](#.D0.92.D1.80.D1.83.D1.87.D0.BD.D1.83.D1.8E)
        *   [3.1.1 Создание файла подкачки](#.D0.A1.D0.BE.D0.B7.D0.B4.D0.B0.D0.BD.D0.B8.D0.B5_.D1.84.D0.B0.D0.B9.D0.BB.D0.B0_.D0.BF.D0.BE.D0.B4.D0.BA.D0.B0.D1.87.D0.BA.D0.B8)
        *   [3.1.2 Удаление файла подкачки](#.D0.A3.D0.B4.D0.B0.D0.BB.D0.B5.D0.BD.D0.B8.D0.B5_.D1.84.D0.B0.D0.B9.D0.BB.D0.B0_.D0.BF.D0.BE.D0.B4.D0.BA.D0.B0.D1.87.D0.BA.D0.B8)
    *   [3.2 Автоматически](#.D0.90.D0.B2.D1.82.D0.BE.D0.BC.D0.B0.D1.82.D0.B8.D1.87.D0.B5.D1.81.D0.BA.D0.B8)
        *   [3.2.1 systemd-swap](#systemd-swap)
*   [4 Подкачка с USB устройства](#.D0.9F.D0.BE.D0.B4.D0.BA.D0.B0.D1.87.D0.BA.D0.B0_.D1.81_USB_.D1.83.D1.81.D1.82.D1.80.D0.BE.D0.B9.D1.81.D1.82.D0.B2.D0.B0)
*   [5 Шифрование подкачки](#.D0.A8.D0.B8.D1.84.D1.80.D0.BE.D0.B2.D0.B0.D0.BD.D0.B8.D0.B5_.D0.BF.D0.BE.D0.B4.D0.BA.D0.B0.D1.87.D0.BA.D0.B8)
*   [6 Производительность](#.D0.9F.D1.80.D0.BE.D0.B8.D0.B7.D0.B2.D0.BE.D0.B4.D0.B8.D1.82.D0.B5.D0.BB.D1.8C.D0.BD.D0.BE.D1.81.D1.82.D1.8C)
    *   [6.1 Swappiness](#Swappiness)
    *   [6.2 VFS cache pressure](#VFS_cache_pressure)
    *   [6.3 Приоритет](#.D0.9F.D1.80.D0.B8.D0.BE.D1.80.D0.B8.D1.82.D0.B5.D1.82)
    *   [6.4 Использование zswap или zram](#.D0.98.D1.81.D0.BF.D0.BE.D0.BB.D1.8C.D0.B7.D0.BE.D0.B2.D0.B0.D0.BD.D0.B8.D0.B5_zswap_.D0.B8.D0.BB.D0.B8_zram)
    *   [6.5 Чередование](#.D0.A7.D0.B5.D1.80.D0.B5.D0.B4.D0.BE.D0.B2.D0.B0.D0.BD.D0.B8.D0.B5)

## Пространство подкачки

Пространство подкачки может быть разделом диска или файлом. Пользователи могут создать пространство подкачки во время установки или позднее в любое желаемое время. Пространство подкачки может быть использовано для двух целей, расширить виртуальную память за пределы установленной оперативной памяти (RAM), а также для сохранения данных при гибернации (suspend-to-disk).

Иногда стоит включать Swap в зависимости от установленной оперативной памяти и количества требований для запуска желаемых программ. Если количество оперативной памяти меньше требуемого, тогда стоит включить подкачку. Это позволяет избежать [состояния нехватки памяти (OOM)](https://en.wikipedia.org/wiki/Out_of_memory "wikipedia:Out of memory"), при котором механизм ядра Linux, OOM Killer, будет автоматически пытаться освободить память, убивая процессы. Чтобы увеличить количество виртуальной памяти до требуемого уровня, добавьте необходимую разницу как пространство подкачки. Например, если программа требует 7,5 GB памяти для запуска, а у вас установлено 4 GB оперативной памяти, добавьте разницу 3,5 GB как подкачку. В будущем добавляйте больше пространства к подкачке, учитывая требования. Это вопрос личных предпочтений если вы считаете, что программы должны быть убиты, вместо включения подкачки. Самый большой недостаток в подкачке это снижение производительности, см. раздел [#Производительность](#.D0.9F.D1.80.D0.BE.D0.B8.D0.B7.D0.B2.D0.BE.D0.B4.D0.B8.D1.82.D0.B5.D0.BB.D1.8C.D0.BD.D0.BE.D1.81.D1.82.D1.8C)

Для проверки статуса подкачки, используйте:

```
$ swapon --show

```

Или

```
$ free -h

```

*free* также покажет недостаток памяти, который может быть исправлен включением или увеличением подкачки.

**Примечание:** Преимущества в производительности между файлом и разделом подкачки нет, оба варианта обрабатываются одинаково.

## Раздел подкачки

Раздел подкачки может быть создан различными GNU/Linux [утилитами разметки](/index.php/Partitioning_(%D0%A0%D1%83%D1%81%D1%81%D0%BA%D0%B8%D0%B9) "Partitioning (Русский)"). Разделы подкачки обычно обозначаются как тип `82`. Хотя есть возможность использовать разные типы как подкачку, рекомендуется использовать тип `82`, в большинстве случаев [systemd](/index.php/Systemd_(%D0%A0%D1%83%D1%81%D1%81%D0%BA%D0%B8%D0%B9) "Systemd (Русский)"), будет автоматически определять его и монтировать (см. ниже)

Для установки раздела как область Linux подкачки, можно использовать `mkswap`. Например:

```
# mkswap /dev/sd*xy*

```

**Важно:** Все данные на указанном разделе будут утеряны.

Для подключения устройства как подкачку:

```
# swapon /dev/sd*xy*

```

Чтобы подключить этот раздел подкачки при загрузке, добавьте запись в [fstab](/index.php/Fstab_(%D0%A0%D1%83%D1%81%D1%81%D0%BA%D0%B8%D0%B9) "Fstab (Русский)"):

```
UUID=<UUID> none swap defaults 0 0

```

где <UUID> может быть получен из команды:

```
lsblk -no UUID /dev/sd*xy*

```

**Совет:** Предпочтительно использовать UUID и LABEL, чем имена устройств полученные от ядра *(/dev/sd*)*, т.к. порядок устройств может измениться в будущем. Смотри [fstab](/index.php/Fstab_(%D0%A0%D1%83%D1%81%D1%81%D0%BA%D0%B8%D0%B9) "Fstab (Русский)").

**Примечание:**

*   Эта fstab запись необязательна если раздел подкачки находится на устройстве, использующий GPT разметку, см. следующий подраздел.
*   Если используется SSD с поддержкой [TRIM](/index.php/Solid_State_Drives_(%D0%A0%D1%83%D1%81%D1%81%D0%BA%D0%B8%D0%B9)#TRIM "Solid State Drives (Русский)"), учтите использование `defaults,discard` в [fstab](/index.php/Fstab_(%D0%A0%D1%83%D1%81%D1%81%D0%BA%D0%B8%D0%B9) "Fstab (Русский)") строке подключения подкачки. Если в ручную активировать подкачку с помощью *swapon*, используйте параметр `-d`/`--discard`, который делает тоже самое. Подробности смотри в [swapon(8)](https://jlk.fjfi.cvut.cz/arch/manpages/man/swapon.8).

**Важно:** Включение discard в RAID установке с использованием mdadm, приведёт к блокировке системы при загрузке и во время выполнения, если использовать swapon.

### Активация используя systemd

Активация разделов подкачки в [systemd](/index.php/Systemd_(%D0%A0%D1%83%D1%81%D1%81%D0%BA%D0%B8%D0%B9) "Systemd (Русский)") базируется на двух различных механизмах. Оба исполняются в `/usr/lib/systemd/system-generators`. Генераторы запускаются при старте системы и создают нативные systemd юниты для монтирования. Первый `systemd-fstab-generator`, читает fstab, чтобы генерировать юниты, включая юнит для подкачки. Второй `systemd-gpt-auto-generator`, осматривает корневой диск, чтобы генерировать юниты. Это операция проходит только на GPT дисках и может идентифицировать разделы подкачки по их тип коду `82`.

### Отключение подкачки

Чтобы деактивировать определенное пространство подкачки:

```
# swapoff /dev/sd*xy*

```

Также можно использовать `-a` ключ, чтобы деактивировать все пространства подкачки.

С тех пор, как systemd управляет подкачкой, она вновь будет активирована при старте системы, для долговременного отключения автоматической активации найденных пространств подкачки, выполните `systemctl --type swap`, чтобы найти связанные со *.swap* юниты и замаскируйте ([systemctl mask *юнит*](/index.php/Systemd_(%D0%A0%D1%83%D1%81%D1%81%D0%BA%D0%B8%D0%B9)#.D0.98.D1.81.D0.BF.D0.BE.D0.BB.D1.8C.D0.B7.D0.BE.D0.B2.D0.B0.D0.BD.D0.B8.D0.B5_.D1.8E.D0.BD.D0.B8.D1.82.D0.BE.D0.B2 "Systemd (Русский)")) их.

## Файл подкачки

Как альтернатива к созданию целого раздела, файл подкачки даёт возможность менять свой размер на лету, а также его гораздо легче полностью удалить. Это может быть особенно важно, если дисковое пространство ограничено (например, небольшие SSD)

**Важно:** [Btrfs](/index.php/Btrfs_(%D0%A0%D1%83%D1%81%D1%81%D0%BA%D0%B8%D0%B9) "Btrfs (Русский)") не поддерживает файлы подкачки. Несоблюдение этого предупреждения, может стать результатом разрушения файловой системы. Пока что, файл подкачки может быть использован в Btrfs, если смонтирован через loop-устройство, тогда будет сильно уменьшена производительность подкачки.

### Вручную

#### Создание файла подкачки

Использовать под суперпользователем `fallocate`, чтобы создать файл подкачки размером на свой выбор (M = [Mebibytes](https://en.wikipedia.org/wiki/Mebibyte "wikipedia:Mebibyte"), G = [Gibibytes](https://en.wikipedia.org/wiki/Gibibyte "wikipedia:Gibibyte")). Например создание 512 MiB файла подкачки:

```
# fallocate -l 512M /swapfile

```

**Примечание:** *fallocate* может вызвать проблемы с некоторыми файловыми системами, такими как: [F2FS](/index.php/F2FS_(%D0%A0%D1%83%D1%81%D1%81%D0%BA%D0%B8%D0%B9) "F2FS (Русский)") или [XFS](/index.php/XFS_(%D0%A0%D1%83%D1%81%D1%81%D0%BA%D0%B8%D0%B9) "XFS (Русский)").[[1]](https://bugzilla.redhat.com/show_bug.cgi?id=1129205#c3). Как вариант, используйте *dd*, наиболее надёжный, но медленный. `# dd if=/dev/zero of=/swapfile bs=1M count=512` 

Установите права доступа (всеми читаемый файл подкачки это огромная локальная уязвимость)

```
# chmod 600 /swapfile

```

После создания файла нужного размера, форматируйте его в подкачку:

```
# mkswap /swapfile

```

Активируйте файл подкачки:

```
# swapon /swapfile

```

В завершении, отредактируйте [fstab](/index.php/Fstab_(%D0%A0%D1%83%D1%81%D1%81%D0%BA%D0%B8%D0%B9) "Fstab (Русский)"), добавив запись для файла подкачки:

 `/etc/fstab`  `/swapfile none swap defaults 0 0` 
**Примечание:** Не забудьте добавить discard, если у вас SSD с поддержкой TRIM
```
# swapon --discard /swapfile

```
 `/etc/fstab`  `/swapfile none swap defaults,discard 0 0` 

#### Удаление файла подкачки

Чтобы удалить файл подкачки, сначала нужно отключить подкачку, а затем файл может быть удален:

```
# swapoff -a
# rm -f /swapfile

```

В завершении, удалите соответствующую запись из `/etc/fstab`.

### Автоматически

#### systemd-swap

[Установить](/index.php/Help:Reading_(%D0%A0%D1%83%D1%81%D1%81%D0%BA%D0%B8%D0%B9) "Help:Reading (Русский)") [systemd-swap](https://www.archlinux.org/packages/?name=systemd-swap) пакет. Установить `swapfc_enabled=1` в *Swap File Chunked* разделе файла `/etc/systemd/swap.conf`. [Start/enable](/index.php/Systemd_(%D0%A0%D1%83%D1%81%D1%81%D0%BA%D0%B8%D0%B9)#.D0.98.D1.81.D0.BF.D0.BE.D0.BB.D1.8C.D0.B7.D0.BE.D0.B2.D0.B0.D0.BD.D0.B8.D0.B5_.D1.8E.D0.BD.D0.B8.D1.82.D0.BE.D0.B2 "Systemd (Русский)") `systemd-swap` сервис. Посетить страницу [авторов на GitHub](https://github.com/Nefelim4ag/systemd-swap) для получения подробностей и установить [рекомендуемую конфигурацию](https://github.com/Nefelim4ag/systemd-swap/blob/master/README.md#about-configuration).

**Примечание:** Если журнал продолжает показывать следующее предупреждение `systemd-swap[..]: WARN: swapFC: ENOSPC` и файл подкачки не создаётся, вы должны установить параметр `swapfc_force_preallocated=1` в `/etc/systemd/swap.conf`.

## Подкачка с USB устройства

Благодаря модульности, предлагаемой Linux, мы можем иметь множество разделов подкачки на различных устройствах. Если у вас полностью заполнен жесткий диск, то можно использовать USB устройство как временный раздел подкачки. Однако, этот метод имеет серьёзные недостатки:

*   USB устройство медленнее чем жесткий диск
*   Flash память имеет ограниченное количество циклов записи. Использование его как раздела подкачки, может быстро убить его.

Чтобы добавить USB устройство как подкачку, сначала необходимо разметить USB флешку для подкачки как описано в секции [#Раздел подкачки](#.D0.A0.D0.B0.D0.B7.D0.B4.D0.B5.D0.BB_.D0.BF.D0.BE.D0.B4.D0.BA.D0.B0.D1.87.D0.BA.D0.B8).

Далее откройте `/etc/fstab` и добавьте

```
pri=0

```

в опции монтирования *первоначальной* записи подкачки, таким образом USB подкачка будет иметь приоритет записи над старым разделом.

Данная инструкция будет работать и для других устройств хранения, таких как SD карты и т.д.

## Шифрование подкачки

Смотри: [dm-crypt/Swap encryption](/index.php/Dm-crypt/Swap_encryption "Dm-crypt/Swap encryption").

## Производительность

Операции подкачки как правило существенно медленнее чем непосредственный доступ к RAM. Отключение подкачки полностью для повышения производительности, иногда может привести к ухудшению, поскольку это уменьшает доступную память для VFS кеша, вызывая более частые и дорогостоящие операции ввода/вывода.

Значения подкачки можно настроить, чтобы помочь производительности:

### Swappiness

*Swappiness* [sysctl](/index.php/Sysctl "Sysctl") параметр представляющий частоту использования пространства подкачки. Swappiness может иметь значение от 0 до 100, значение по умолчанию = 60\. Низкое значение заставляет ядро избегать подкачки, высокое значение позволяет ядру использовать подкачку *наперёд*. Использование низкого значения на достаточном количестве памяти, улучшает отзывчивость на многих системах.

Чтобы проверить текущее значение swappiness:

```
$ cat /sys/fs/cgroup/memory/memory.swappiness

```

или

```
$ cat /proc/sys/vm/swappiness

```

**Примечание:** Т.к. `/proc` менее организован и сохраняется только для обратной совместимости, вместо него предпочтительнее использовать `/sys`.

Чтобы временно установить значение swappiness:

```
# sysctl vm.swappiness=10

```

Чтобы постоянно установить значение swappiness, отредактируйте (создайте) конфигурационный файл *sysctl*

 `/etc/sysctl.d/99-sysctl.conf`  `vm.swappiness=10` 

Чтобы проверить и больше узнать, почему оно так работает, посмотрите [эту статью](http://rudd-o.com/en/linux-and-free-software/tales-from-responsivenessland-why-linux-feels-slow-and-how-to-fix-that).

### VFS cache pressure

Другой *sysctl* параметр, который действует на производительность подкачки это `vm.vfs_cache_pressure`, он контролирует склонность ядра к применению памяти, которая используется для кэширования VFS caches, напротив кэширования страниц и подкачки. Увеличение этого значения увеличивает коэффициент с которым VFS caches применяется[[2]](http://doc.opensuse.org/documentation/leap/tuning/html/book.sle.tuning/cha.tuning.memory.html#cha.tuning.memory.vm.reclaim). Для подробной информации смотри [документацию ядра Linux](https://www.kernel.org/doc/Documentation/sysctl/vm.txt).

### Приоритет

Если у вас больше одного файла или раздела подкачки, вы должны учитывать присвоение приоритетного значения (от 0 до 32767) для каждой области подкачки. Система будет использовать области подкачки с высоким приоритетом, перед использованием областей с низким приоритетом. Например, если у вас быстрый диск (`/dev/sda`) и медленный (`/dev/sdb`), назначьте высокий приоритет для подкачки расположенной на быстром устройстве. Приоритет может быть назначен в [fstab](/index.php/Fstab_(%D0%A0%D1%83%D1%81%D1%81%D0%BA%D0%B8%D0%B9) "Fstab (Русский)") как `pri` параметр:

```
/dev/sda1 none swap defaults,pri=100 0 0
/dev/sdb2 none swap defaults,pri=10  0 0

```

Или как параметр в *swapon* `--priority`

```
# swapon --priority 100 /dev/sda1

```

Если две или более областей будут иметь одинаковый приоритет и он будет самым высоким из доступным приоритетов, то страницы будут распределяться по кругу между областями.

### Использование zswap или zram

[Zswap](/index.php/Zswap "Zswap") это особенность ядра Linux, обеспечивающая сжатие обратного кэша для страниц подкачки. Она увеличивает производительность и уменьшает операции ввода/вывода. [ZRAM](/index.php/ZRAM "ZRAM") создаёт виртуальный сжатый файл подкачки в памяти, как альтернатива файлу подкачки на диске.

### Чередование

Нет необходимости использовать [RAID](/index.php/RAID_(%D0%A0%D1%83%D1%81%D1%81%D0%BA%D0%B8%D0%B9) "RAID (Русский)") для повышения производительности подкачки. Ядро самостоятельно может чередовать подкачку на нескольких устройствах, если вы присвоите им одинаковый приоритет в `/etc/fstab`. Для подробной информации смотри [The Software-RAID HOWTO](http://unthought.net/Software-RAID.HOWTO/Software-RAID.HOWTO-2.html#ss2.3).